package Model;

import Model.Settings.ModelSettings;
import Model.Exceptions.PathFileException;
import java.io.File;
import java.io.Serializable;
/**
 * 
 * La classe PathFile represente un fichier en cours de transfert 
 * 
 * @author      Frank Djomo
 * @author      Christelle SIAGO HAPPI
 * @author      djomopoueme@gmail.com
 * @author      christelle.siagohappi@gmail.com
 * @version     1.0
 */
public class PathFile implements Serializable {
    /**
    * 
    */
    private static final long serialVersionUID = 2881191422832386087L;

    /**
    * La nom de fichier
    */
    private  File m_Path;
    /**
    * Constructeur
    * @param path  Chemin vers le fichier
    * @throws PathFileException
    */
    public PathFile( String path) throws PathFileException {
        if( ModelSettings.checkPathSize( (new File(path)).getName() ) == false) throw new PathFileException("PathFile invalide"); 
        this.m_Path = new File(path);
    }

    /**
    * Constructeur
    * @param path  PathFile à copier
    */
    public PathFile(PathFile path) {
        this.m_Path = new File(path.getAbsolutePath());
    }
    /**
    * @return Le nom du fichier
    */
    public final String getName() {
        return this.m_Path.getName();
    }
    /**
    * @return Le dossier du fichier
    */
    public final String getDirectory() {
        return this.m_Path.getParent();
    }
    /**
    * @return Le chemin absolu du fichier
    */
    public final String getAbsolutePath() {
        return this.m_Path.getAbsolutePath();
    }
    /**
    * @return La description du fichier
    */
    public final File getFile() {
        return this.m_Path;
    }
    /**
    * @return Le chemin absolu du fichier
    */
    @Override
    public String toString() {
        return this.getAbsolutePath();
    }
    /**
    * Teste si deux objects PathFile dont identiques.
    * @return    <code>true</code> si egaux 
    *            <code>false</code> sinon 
    */
    @Override
    public boolean equals(Object o) {
        return (this.getClass().isInstance(o) && this.hashCode()==(((PathFile)o).hashCode()));
    }
    /**
    * Genere un hashcode pour les objets FileId.
    * @return valeur du hashcode
    */
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 71 * hash + (this.m_Path != null ? this.m_Path.hashCode() : 0);
        return hash;
    }  
}
